home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / logic.s < prev    next >
Encoding:
Text File  |  1999-02-04  |  17.9 KB  |  1,314 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/logic.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_read_rgba_span
  7.     XREF    _gl_error
  8.     XREF    _gl_problem
  9.     XREF    _gl_read_alpha_pixels
  10.     XREF    _CC
  11.  
  12.     SECTION "_gl_LogicOp:0",CODE
  13.  
  14.  
  15. ;void gl_LogicOp( GLcontext *ctx, GLenum opcode )
  16.     XDEF    _gl_LogicOp
  17. _gl_LogicOp
  18.     move.l    $8(a7),d0
  19.     move.l    4(a7),a0
  20. L163
  21. ;   if (INSIDE_BEGIN_END(ctx)) 
  22.     move.l    a0,a1
  23.     add.l    #$E968,a1
  24.     move.l    (a1),d1
  25.     cmp.l    #$1A00,d1
  26.     beq.b    L165
  27. L164
  28. ;      gl_error( ctx, GL_INVALID_OPERATION, "glLogicOp" );
  29.     move.l    #L162,-(a7)
  30.     pea    $502.w
  31.     move.l    a0,-(a7)
  32.     jsr    _gl_error
  33.     add.w    #$C,a7
  34.     rts
  35. L165
  36. ;   switch (opcode)
  37.     move.l    d0,d1
  38.     sub.l    #$1500,d1
  39.     cmp.l    #$F,d1
  40.     bhi.b    L167
  41.     move.l    L168(pc,d1.l*4),a1
  42.     jmp    (a1)
  43. L168
  44.     dc.l    L166
  45.     dc.l    L166
  46.     dc.l    L166
  47.     dc.l    L166
  48.     dc.l    L166
  49.     dc.l    L166
  50.     dc.l    L166
  51.     dc.l    L166
  52.     dc.l    L166
  53.     dc.l    L166
  54.     dc.l    L166
  55.     dc.l    L166
  56.     dc.l    L166
  57.     dc.l    L166
  58.     dc.l    L166
  59.     dc.l    L166
  60. ;      
  61. L166
  62. ;         ctx->Color.LogicOp = opcode;
  63.     move.l    d0,$220E(a0)
  64. ;         ctx->NewState |= NEW_RASTER_OPS;
  65.     move.l    a0,a1
  66.     add.l    #$E960,a1
  67.     move.l    (a1),d0
  68.     or.l    #2,d0
  69.     add.l    #$E960,a0
  70.     move.l    d0,(a0)
  71.     rts
  72. L167
  73. ;         gl_error( ctx, GL_INVALID_ENUM, "glLogicOp" );
  74.     move.l    #L162,-(a7)
  75.     pea    $500.w
  76.     move.l    a0,-(a7)
  77.     jsr    _gl_error
  78.     add.w    #$C,a7
  79.     rts
  80.  
  81. L162
  82.     dc.b    'glLogicOp',0
  83.  
  84.     SECTION "_index_logicop:0",CODE
  85.  
  86.     rts
  87.  
  88. ;static void index_logicop( GLcontext *ctx, GLuint n,
  89. _index_logicop
  90.     movem.l    d2-d4/a2-a4,-(a7)
  91.     movem.l    $20(a7),d1/a0/a2
  92.     move.l    $2C(a7),a1
  93.     move.l    $1C(a7),a4
  94. L170
  95. ;   switch (ctx->Color.LogicOp)
  96.     move.l    #$21C4,d0
  97.     add.l    a4,d0
  98.     move.l    d0,a3
  99.     move.l    $4A(a3),d0
  100.     sub.l    #$1500,d0
  101.     cmp.l    #$F,d0
  102.     bhi    L262
  103.     move.l    L264(pc,d0.l*4),a3
  104.     jmp    (a3)
  105. L264
  106.     dc.l    L171
  107.     dc.l    L202
  108.     dc.l    L238
  109.     dc.l    L183
  110.     dc.l    L244
  111.     dc.l    L190
  112.     dc.l    L226
  113.     dc.l    L214
  114.     dc.l    L220
  115.     dc.l    L232
  116.     dc.l    L196
  117.     dc.l    L250
  118.     dc.l    L184
  119.     dc.l    L256
  120.     dc.l    L208
  121.     dc.l    L177
  122. ;      
  123. L171
  124. ;         for (i=0;
  125.     moveq    #0,d0
  126.     bra.b    L175
  127. L172
  128. ;        if (mask[i]) 
  129.     tst.b    0(a1,d0.l)
  130.     beq.b    L174
  131. L173
  132. ;           index[i] = 0;
  133.     clr.l    0(a0,d0.l*4)
  134. L174
  135.     addq.l    #1,d0
  136. L175
  137.     cmp.l    d1,d0
  138.     blo.b    L172
  139. L176
  140. ;     
  141.     bra    L263
  142. L177
  143. ;         for (i=0;
  144.     moveq    #0,d0
  145.     bra.b    L181
  146. L178
  147. ;        if (mask[i]) 
  148.     tst.b    0(a1,d0.l)
  149.     beq.b    L180
  150. L179
  151. ;           index[i] = 1;
  152.     move.l    #1,0(a0,d0.l*4)
  153. L180
  154.     addq.l    #1,d0
  155. L181
  156.     cmp.l    d1,d0
  157.     blo.b    L178
  158. L182
  159. ;     
  160.     bra    L263
  161. L183
  162. ;     
  163.     bra    L263
  164. L184
  165. ;         for (i=0;
  166.     moveq    #0,d0
  167.     bra.b    L188
  168. L185
  169. ;        if (mask[i]) 
  170.     tst.b    0(a1,d0.l)
  171.     beq.b    L187
  172. L186
  173. ;           index[i] = ~index[i];
  174.     move.l    0(a0,d0.l*4),d2
  175.     not.l    d2
  176.     move.l    d2,0(a0,d0.l*4)
  177. L187
  178.     addq.l    #1,d0
  179. L188
  180.     cmp.l    d1,d0
  181.     blo.b    L185
  182. L189
  183. ;     
  184.     bra    L263
  185. L190
  186. ;         for (i=0;
  187.     moveq    #0,d0
  188.     bra.b    L194
  189. L191
  190. ;        if (mask[i]) 
  191.     move.l    d0,d2
  192.     add.l    a1,d2
  193.     move.l    d2,a3
  194.     tst.b    (a3)
  195.     beq.b    L193
  196. L192
  197. ;           index[i] = dest[i];
  198.     move.l    d0,d2
  199.     asl.l    #2,d2
  200.     add.l    a2,d2
  201.     move.l    d2,a3
  202.     move.l    (a3),d2
  203.     move.l    d0,d3
  204.     asl.l    #2,d3
  205.     add.l    a0,d3
  206.     move.l    d3,a3
  207.     move.l    d2,(a3)
  208. L193
  209.     addq.l    #1,d0
  210. L194
  211.     cmp.l    d1,d0
  212.     blo.b    L191
  213. L195
  214. ;     
  215.     bra    L263
  216. L196
  217. ;         for (i=0;
  218.     moveq    #0,d0
  219.     bra.b    L200
  220. L197
  221. ;        if (mask[i]) 
  222.     move.l    d0,d2
  223.     add.l    a1,d2
  224.     move.l    d2,a3
  225.     tst.b    (a3)
  226.     beq.b    L199
  227. L198
  228. ;           index[i] = ~dest[i];
  229.     move.l    d0,d2
  230.     asl.l    #2,d2
  231.     add.l    a2,d2
  232.     move.l    d2,a3
  233.     move.l    (a3),d2
  234.     not.l    d2
  235.     move.l    d0,d3
  236.     asl.l    #2,d3
  237.     add.l    a0,d3
  238.     move.l    d3,a3
  239.     move.l    d2,(a3)
  240. L199
  241.     addq.l    #1,d0
  242. L200
  243.     cmp.l    d1,d0
  244.     blo.b    L197
  245. L201
  246. ;     
  247.     bra    L263
  248. L202
  249. ;         for (i=0;
  250.     moveq    #0,d0
  251.     bra.b    L206
  252. L203
  253. ;        if (mask[i]) 
  254.     move.l    d0,d2
  255.     add.l    a1,d2
  256.     move.l    d2,a3
  257.     tst.b    (a3)
  258.     beq.b    L205
  259. L204
  260. ;           index[i] &= dest[i];
  261.     move.l    d0,d2
  262.     asl.l    #2,d2
  263.     add.l    a2,d2
  264.     move.l    d2,a3
  265.     move.l    (a3),d3
  266.     move.l    d0,d2
  267.     asl.l    #2,d2
  268.     add.l    a0,d2
  269.     move.l    d2,a4
  270.     move.l    a4,a3
  271.     move.l    (a3),d2
  272.     and.l    d3,d2
  273.     move.l    a4,a3
  274.     move.l    d2,(a3)
  275. L205
  276.     addq.l    #1,d0
  277. L206
  278.     cmp.l    d1,d0
  279.     blo.b    L203
  280. L207
  281. ;     
  282.     bra    L263
  283. L208
  284. ;         for (i=0;
  285.     moveq    #0,d0
  286.     bra.b    L212
  287. L209
  288. ;        if (mask[i]) 
  289.     move.l    d0,d2
  290.     add.l    a1,d2
  291.     move.l    d2,a3
  292.     tst.b    (a3)
  293.     beq.b    L211
  294. L210
  295. ;           index[i] = ~(index[i] & dest[i]);
  296.     move.l    d0,d2
  297.     asl.l    #2,d2
  298.     add.l    a0,d2
  299.     move.l    d2,a3
  300.     move.l    (a3),d2
  301.     move.l    d0,d3
  302.     asl.l    #2,d3
  303.     add.l    a2,d3
  304.     move.l    d3,a3
  305.     and.l    (a3),d2
  306.     not.l    d2
  307.     move.l    d0,d3
  308.     asl.l    #2,d3
  309.     add.l    a0,d3
  310.     move.l    d3,a3
  311.     move.l    d2,(a3)
  312. L211
  313.     addq.l    #1,d0
  314. L212
  315.     cmp.l    d1,d0
  316.     blo.b    L209
  317. L213
  318. ;     
  319.     bra    L263
  320. L214
  321. ;         for (i=0;
  322.     moveq    #0,d0
  323.     bra.b    L218
  324. L215
  325. ;        if (mask[i]) 
  326.     move.l    d0,d2
  327.     add.l    a1,d2
  328.     move.l    d2,a3
  329.     tst.b    (a3)
  330.     beq.b    L217
  331. L216
  332. ;           index[i] |= dest[i];
  333.     move.l    d0,d2
  334.     asl.l    #2,d2
  335.     add.l    a2,d2
  336.     move.l    d2,a3
  337.     move.l    (a3),d3
  338.     move.l    d0,d2
  339.     asl.l    #2,d2
  340.     add.l    a0,d2
  341.     move.l    d2,a4
  342.     move.l    a4,a3
  343.     move.l    (a3),d2
  344.     or.l    d3,d2
  345.     move.l    a4,a3
  346.     move.l    d2,(a3)
  347. L217
  348.     addq.l    #1,d0
  349. L218
  350.     cmp.l    d1,d0
  351.     blo.b    L215
  352. L219
  353. ;     
  354.     bra    L263
  355. L220
  356. ;         for (i=0;
  357.     moveq    #0,d0
  358.     bra.b    L224
  359. L221
  360. ;        if (mask[i]) 
  361.     move.l    d0,d2
  362.     add.l    a1,d2
  363.     move.l    d2,a3
  364.     tst.b    (a3)
  365.     beq.b    L223
  366. L222
  367. ;           index[i] = ~(index[i] | dest[i]);
  368.     move.l    d0,d2
  369.     asl.l    #2,d2
  370.     add.l    a0,d2
  371.     move.l    d2,a3
  372.     move.l    (a3),d2
  373.     move.l    d0,d3
  374.     asl.l    #2,d3
  375.     add.l    a2,d3
  376.     move.l    d3,a3
  377.     or.l    (a3),d2
  378.     not.l    d2
  379.     move.l    d0,d3
  380.     asl.l    #2,d3
  381.     add.l    a0,d3
  382.     move.l    d3,a3
  383.     move.l    d2,(a3)
  384. L223
  385.     addq.l    #1,d0
  386. L224
  387.     cmp.l    d1,d0
  388.     blo.b    L221
  389. L225
  390. ;     
  391.     bra    L263
  392. L226
  393. ;         for (i=0;
  394.     moveq    #0,d0
  395.     bra.b    L230
  396. L227
  397. ;        if (mask[i]) 
  398.     move.l    d0,d2
  399.     add.l    a1,d2
  400.     move.l    d2,a3
  401.     tst.b    (a3)
  402.     beq.b    L229
  403. L228
  404. ;           index[i] ^= dest[i];
  405.     move.l    d0,d2
  406.     asl.l    #2,d2
  407.     add.l    a2,d2
  408.     move.l    d2,a3
  409.     move.l    (a3),d3
  410.     move.l    d0,d2
  411.     asl.l    #2,d2
  412.     add.l    a0,d2
  413.     move.l    d2,a4
  414.     move.l    a4,a3
  415.     move.l    (a3),d2
  416.     eor.l    d3,d2
  417.     move.l    a4,a3
  418.     move.l    d2,(a3)
  419. L229
  420.     addq.l    #1,d0
  421. L230
  422.     cmp.l    d1,d0
  423.     blo.b    L227
  424. L231
  425. ;     
  426.     bra    L263
  427. L232
  428. ;         for (i=0;
  429.     moveq    #0,d0
  430.     bra.b    L236
  431. L233
  432. ;        if (mask[i]) 
  433.     move.l    d0,d2
  434.     add.l    a1,d2
  435.     move.l    d2,a3
  436.     tst.b    (a3)
  437.     beq.b    L235
  438. L234
  439. ;           index[i] = ~(index[i] ^ dest[i]);
  440.     move.l    d0,d2
  441.     asl.l    #2,d2
  442.     add.l    a0,d2
  443.     move.l    d2,a3
  444.     move.l    (a3),d2
  445.     move.l    d0,d3
  446.     asl.l    #2,d3
  447.     add.l    a2,d3
  448.     move.l    d3,a3
  449.     move.l    (a3),d3
  450.     eor.l    d3,d2
  451.     not.l    d2
  452.     move.l    d0,d3
  453.     asl.l    #2,d3
  454.     add.l    a0,d3
  455.     move.l    d3,a3
  456.     move.l    d2,(a3)
  457. L235
  458.     addq.l    #1,d0
  459. L236
  460.     cmp.l    d1,d0
  461.     blo.b    L233
  462. L237
  463. ;     
  464.     bra    L263
  465. L238
  466. ;         for (i=0;
  467.     moveq    #0,d0
  468.     bra.b    L242
  469. L239
  470. ;        if (mask[i]) 
  471.     move.l    d0,d2
  472.     add.l    a1,d2
  473.     move.l    d2,a3
  474.     tst.b    (a3)
  475.     beq.b    L241
  476. L240
  477. ;           index[i] = index[i] & ~dest[i];
  478.     move.l    d0,d2
  479.     asl.l    #2,d2
  480.     add.l    a0,d2
  481.     move.l    d2,a3
  482.     move.l    (a3),d2
  483.     move.l    d0,d3
  484.     asl.l    #2,d3
  485.     add.l    a2,d3
  486.     move.l    d3,a3
  487.     move.l    (a3),d3
  488.     not.l    d3
  489.     and.l    d3,d2
  490.     move.l    d0,d3
  491.     asl.l    #2,d3
  492.     add.l    a0,d3
  493.     move.l    d3,a3
  494.     move.l    d2,(a3)
  495. L241
  496.     addq.l    #1,d0
  497. L242
  498.     cmp.l    d1,d0
  499.     blo.b    L239
  500. L243
  501. ;     
  502.     bra    L263
  503. L244
  504. ;         for (i=0;
  505.     moveq    #0,d0
  506.     bra.b    L248
  507. L245
  508. ;        if (mask[i]) 
  509.     move.l    d0,d2
  510.     add.l    a1,d2
  511.     move.l    d2,a3
  512.     tst.b    (a3)
  513.     beq.b    L247
  514. L246
  515. ;           index[i] = ~index[i] & dest[i];
  516.     move.l    d0,d2
  517.     asl.l    #2,d2
  518.     add.l    a0,d2
  519.     move.l    d2,a3
  520.     move.l    (a3),d2
  521.     not.l    d2
  522.     move.l    d0,d3
  523.     asl.l    #2,d3
  524.     add.l    a2,d3
  525.     move.l    d3,a3
  526.     and.l    (a3),d2
  527.     move.l    d0,d3
  528.     asl.l    #2,d3
  529.     add.l    a0,d3
  530.     move.l    d3,a3
  531.     move.l    d2,(a3)
  532. L247
  533.     addq.l    #1,d0
  534. L248
  535.     cmp.l    d1,d0
  536.     blo.b    L245
  537. L249
  538. ;     
  539.     bra    L263
  540. L250
  541. ;         for (i=0;
  542.     moveq    #0,d0
  543.     bra.b    L254
  544. L251
  545. ;        if (mask[i]) 
  546.     move.l    d0,d2
  547.     add.l    a1,d2
  548.     move.l    d2,a3
  549.     tst.b    (a3)
  550.     beq.b    L253
  551. L252
  552. ;           index[i] = index[i] | ~dest[i];
  553.     move.l    d0,d2
  554.     asl.l    #2,d2
  555.     add.l    a0,d2
  556.     move.l    d2,a3
  557.     move.l    (a3),d2
  558.     move.l    d0,d3
  559.     asl.l    #2,d3
  560.     add.l    a2,d3
  561.     move.l    d3,a3
  562.     move.l    (a3),d3
  563.     not.l    d3
  564.     or.l    d3,d2
  565.     move.l    d0,d3
  566.     asl.l    #2,d3
  567.     add.l    a0,d3
  568.     move.l    d3,a3
  569.     move.l    d2,(a3)
  570. L253
  571.     addq.l    #1,d0
  572. L254
  573.     cmp.l    d1,d0
  574.     blo.b    L251
  575. L255
  576. ;     
  577.     bra.b    L263
  578. L256
  579. ;         for (i=0;
  580.     moveq    #0,d0
  581.     bra.b    L260
  582. L257
  583. ;        if (mask[i]) 
  584.     move.l    d0,d2
  585.     add.l    a1,d2
  586.     move.l    d2,a3
  587.     tst.b    (a3)
  588.     beq.b    L259
  589. L258
  590. ;           index[i] = ~index[i] | dest[i];
  591.     move.l    d0,d2
  592.     asl.l    #2,d2
  593.     add.l    a0,d2
  594.     move.l    d2,a3
  595.     move.l    (a3),d2
  596.     not.l    d2
  597.     move.l    d0,d3
  598.     asl.l    #2,d3
  599.     add.l    a2,d3
  600.     move.l    d3,a3
  601.     or.l    (a3),d2
  602.     move.l    d0,d3
  603.     asl.l    #2,d3
  604.     add.l    a0,d3
  605.     move.l    d3,a3
  606.     move.l    d2,(a3)
  607. L259
  608.     addq.l    #1,d0
  609. L260
  610.     cmp.l    d1,d0
  611.     blo.b    L257
  612. L261
  613. ;     
  614.     bra.b    L263
  615. L262
  616. ;     gl_error( ctx, GL_INVALID_ENUM, "gl_logic error" );
  617.     move.l    #L169,-(a7)
  618.     pea    $500.w
  619.     move.l    a4,-(a7)
  620.     jsr    _gl_error
  621.     add.w    #$C,a7
  622. L263
  623.     movem.l    (a7)+,d2-d4/a2-a4
  624.     rts
  625.  
  626. L169
  627.     dc.b    'gl_logic error',0
  628.  
  629.     SECTION "_gl_logicop_ci_span:0",CODE
  630.  
  631.  
  632. ;void gl_logicop_ci_span( GLcontext *ctx, GLuint n, GLint x, GLint y,
  633.     XDEF    _gl_logicop_ci_span
  634. _gl_logicop_ci_span
  635. L266    EQU    -$1900
  636.     link    a5,#L266
  637.     movem.l    d2/a2-a4,-(a7)
  638.     movem.l    $10(a5),d0/d1/a3/a4
  639.     move.l    $C(a5),d2
  640.     move.l    $8(a5),a2
  641. L265
  642. ;   (*ctx->Driver.ReadCI32Span)( ctx, n, x, y, dest );
  643.     pea    -$1900(a5)
  644.     move.l    d1,-(a7)
  645.     move.l    d0,-(a7)
  646.     move.l    d2,-(a7)
  647.     move.l    a2,-(a7)
  648.     move.l    $94C(a2),a0
  649.     jsr    (a0)
  650.     add.w    #$14,a7
  651. ;   index_logicop( ctx, n, index, dest, mask );
  652.     move.l    a4,-(a7)
  653.     pea    -$1900(a5)
  654.     move.l    a3,-(a7)
  655.     move.l    d2,-(a7)
  656.     move.l    a2,-(a7)
  657.     jsr    _index_logicop
  658.     add.w    #$14,a7
  659.     movem.l    (a7)+,d2/a2-a4
  660.     unlk    a5
  661.     rts
  662.  
  663.     SECTION "_gl_logicop_ci_pixels:0",CODE
  664.  
  665.  
  666. ;void gl_logicop_ci_pixels( GLcontext *ctx,
  667.     XDEF    _gl_logicop_ci_pixels
  668. _gl_logicop_ci_pixels
  669. L268    EQU    -$4B00
  670.     link    a5,#L268
  671.     movem.l    d2/a2-a4,-(a7)
  672.     movem.l    $C(a5),d2/a1
  673.     move.l    $8(a5),a2
  674.     move.l    $1C(a5),a3
  675.     move.l    $18(a5),a4
  676. L267
  677. ;   (*ctx->Driver.ReadCI32Pixels)( ctx, n, x, y, dest, mask );
  678.     move.l    a3,-(a7)
  679.     pea    -$4B00(a5)
  680.     move.l    $14(a5),-(a7)
  681.     move.l    a1,-(a7)
  682.     move.l    d2,-(a7)
  683.     move.l    a2,-(a7)
  684.     move.l    $954(a2),a0
  685.     jsr    (a0)
  686.     add.w    #$18,a7
  687. ;   index_logicop( ctx, n, index, dest, mask );
  688.     move.l    a3,-(a7)
  689.     pea    -$4B00(a5)
  690.     move.l    a4,-(a7)
  691.     move.l    d2,-(a7)
  692.     move.l    a2,-(a7)
  693.     jsr    _index_logicop
  694.     add.w    #$14,a7
  695.     movem.l    (a7)+,d2/a2-a4
  696.     unlk    a5
  697.     rts
  698.  
  699.     SECTION "_rgba_logicop:0",CODE
  700.  
  701.  
  702. ;static void rgba_logicop( const GLcontext *ctx, GLuint n,
  703. _rgba_logicop
  704.     movem.l    d2-d4/a2-a4,-(a7)
  705.     movem.l    $20(a7),d1/a1
  706.     movem.l    $28(a7),a0/a2
  707.     move.l    $1C(a7),a4
  708. L270
  709. ;   switch (ctx->Color.LogicOp)
  710.     move.l    #$21C4,d0
  711.     add.l    a4,d0
  712.     move.l    d0,a3
  713.     move.l    $4A(a3),d0
  714.     sub.l    #$1500,d0
  715.     cmp.l    #$F,d0
  716.     bhi    L362
  717.     move.l    L364(pc,d0.l*4),a3
  718.     jmp    (a3)
  719. L364
  720.     dc.l    L271
  721.     dc.l    L302
  722.     dc.l    L338
  723.     dc.l    L283
  724.     dc.l    L344
  725.     dc.l    L290
  726.     dc.l    L326
  727.     dc.l    L314
  728.     dc.l    L320
  729.     dc.l    L332
  730.     dc.l    L296
  731.     dc.l    L350
  732.     dc.l    L284
  733.     dc.l    L356
  734.     dc.l    L308
  735.     dc.l    L277
  736. ;      
  737. L271
  738. ;         for (i=0;
  739.     moveq    #0,d0
  740.     bra.b    L275
  741. L272
  742. ;            if (mask[i]) 
  743.     tst.b    0(a1,d0.l)
  744.     beq.b    L274
  745. L273
  746. ;               src[i] = 0;
  747.     clr.l    0(a0,d0.l*4)
  748. L274
  749.     addq.l    #1,d0
  750. L275
  751.     cmp.l    d1,d0
  752.     blo.b    L272
  753. L276
  754. ;         
  755.     bra    L363
  756. L277
  757. ;         for (i=0;
  758.     moveq    #0,d0
  759.     bra.b    L281
  760. L278
  761. ;            if (mask[i]) 
  762.     tst.b    0(a1,d0.l)
  763.     beq.b    L280
  764. L279
  765. ;               src[i] = 0xffffffff;
  766.     move.l    #-1,0(a0,d0.l*4)
  767. L280
  768.     addq.l    #1,d0
  769. L281
  770.     cmp.l    d1,d0
  771.     blo.b    L278
  772. L282
  773. ;         
  774.     bra    L363
  775. L283
  776. ;         
  777.     bra    L363
  778. L284
  779. ;         for (i=0;
  780.     moveq    #0,d0
  781.     bra.b    L288
  782. L285
  783. ;            if (mask[i]) 
  784.     tst.b    0(a1,d0.l)
  785.     beq.b    L287
  786. L286
  787. ;               src[i] = ~src[i];
  788.     move.l    0(a0,d0.l*4),d2
  789.     not.l    d2
  790.     move.l    d2,0(a0,d0.l*4)
  791. L287
  792.     addq.l    #1,d0
  793. L288
  794.     cmp.l    d1,d0
  795.     blo.b    L285
  796. L289
  797. ;         
  798.     bra    L363
  799. L290
  800. ;         for (i=0;
  801.     moveq    #0,d0
  802.     bra.b    L294
  803. L291
  804. ;            if (mask[i]) 
  805.     move.l    d0,d2
  806.     add.l    a1,d2
  807.     move.l    d2,a3
  808.     tst.b    (a3)
  809.     beq.b    L293
  810. L292
  811. ;               src[i] = dest[i];
  812.     move.l    d0,d2
  813.     asl.l    #2,d2
  814.     add.l    a2,d2
  815.     move.l    d2,a3
  816.     move.l    (a3),d2
  817.     move.l    d0,d3
  818.     asl.l    #2,d3
  819.     add.l    a0,d3
  820.     move.l    d3,a3
  821.     move.l    d2,(a3)
  822. L293
  823.     addq.l    #1,d0
  824. L294
  825.     cmp.l    d1,d0
  826.     blo.b    L291
  827. L295
  828. ;         
  829.     bra    L363
  830. L296
  831. ;         for (i=0;
  832.     moveq    #0,d0
  833.     bra.b    L300
  834. L297
  835. ;            if (mask[i]) 
  836.     move.l    d0,d2
  837.     add.l    a1,d2
  838.     move.l    d2,a3
  839.     tst.b    (a3)
  840.     beq.b    L299
  841. L298
  842. ;               src[i] = ~dest[i];
  843.     move.l    d0,d2
  844.     asl.l    #2,d2
  845.     add.l    a2,d2
  846.     move.l    d2,a3
  847.     move.l    (a3),d2
  848.     not.l    d2
  849.     move.l    d0,d3
  850.     asl.l    #2,d3
  851.     add.l    a0,d3
  852.     move.l    d3,a3
  853.     move.l    d2,(a3)
  854. L299
  855.     addq.l    #1,d0
  856. L300
  857.     cmp.l    d1,d0
  858.     blo.b    L297
  859. L301
  860. ;         
  861.     bra    L363
  862. L302
  863. ;         for (i=0;
  864.     moveq    #0,d0
  865.     bra.b    L306
  866. L303
  867. ;            if (mask[i]) 
  868.     move.l    d0,d2
  869.     add.l    a1,d2
  870.     move.l    d2,a3
  871.     tst.b    (a3)
  872.     beq.b    L305
  873. L304
  874. ;               src[i] &= dest[i];
  875.     move.l    d0,d2
  876.     asl.l    #2,d2
  877.     add.l    a2,d2
  878.     move.l    d2,a3
  879.     move.l    (a3),d3
  880.     move.l    d0,d2
  881.     asl.l    #2,d2
  882.     add.l    a0,d2
  883.     move.l    d2,a4
  884.     move.l    a4,a3
  885.     move.l    (a3),d2
  886.     and.l    d3,d2
  887.     move.l    a4,a3
  888.     move.l    d2,(a3)
  889. L305
  890.     addq.l    #1,d0
  891. L306
  892.     cmp.l    d1,d0
  893.     blo.b    L303
  894. L307
  895. ;         
  896.     bra    L363
  897. L308
  898. ;         for (i=0;
  899.     moveq    #0,d0
  900.     bra.b    L312
  901. L309
  902. ;            if (mask[i]) 
  903.     tst.b    0(a1,d0.l)
  904.     beq.b    L311
  905. L310
  906. ;               src[i] = ~(src[i] & src[i]);
  907.     move.l    0(a0,d0.l*4),d2
  908.     and.l    0(a0,d0.l*4),d2
  909.     not.l    d2
  910.     move.l    d2,0(a0,d0.l*4)
  911. L311
  912.     addq.l    #1,d0
  913. L312
  914.     cmp.l    d1,d0
  915.     blo.b    L309
  916. L313
  917. ;         
  918.     bra    L363
  919. L314
  920. ;         for (i=0;
  921.     moveq    #0,d0
  922.     bra.b    L318
  923. L315
  924. ;            if (mask[i]) 
  925.     move.l    d0,d2
  926.     add.l    a1,d2
  927.     move.l    d2,a3
  928.     tst.b    (a3)
  929.     beq.b    L317
  930. L316
  931. ;               src[i]|= dest[i];
  932.     move.l    d0,d2
  933.     asl.l    #2,d2
  934.     add.l    a2,d2
  935.     move.l    d2,a3
  936.     move.l    (a3),d3
  937.     move.l    d0,d2
  938.     asl.l    #2,d2
  939.     add.l    a0,d2
  940.     move.l    d2,a4
  941.     move.l    a4,a3
  942.     move.l    (a3),d2
  943.     or.l    d3,d2
  944.     move.l    a4,a3
  945.     move.l    d2,(a3)
  946. L317
  947.     addq.l    #1,d0
  948. L318
  949.     cmp.l    d1,d0
  950.     blo.b    L315
  951. L319
  952. ;         
  953.     bra    L363
  954. L320
  955. ;         for (i=0;
  956.     moveq    #0,d0
  957.     bra.b    L324
  958. L321
  959. ;            if (mask[i]) 
  960.     move.l    d0,d2
  961.     add.l    a1,d2
  962.     move.l    d2,a3
  963.     tst.b    (a3)
  964.     beq.b    L323
  965. L322
  966. ;               src[i] = ~(src[i] | dest[i]);
  967.     move.l    d0,d2
  968.     asl.l    #2,d2
  969.     add.l    a0,d2
  970.     move.l    d2,a3
  971.     move.l    (a3),d2
  972.     move.l    d0,d3
  973.     asl.l    #2,d3
  974.     add.l    a2,d3
  975.     move.l    d3,a3
  976.     or.l    (a3),d2
  977.     not.l    d2
  978.     move.l    d0,d3
  979.     asl.l    #2,d3
  980.     add.l    a0,d3
  981.     move.l    d3,a3
  982.     move.l    d2,(a3)
  983. L323
  984.     addq.l    #1,d0
  985. L324
  986.     cmp.l    d1,d0
  987.     blo.b    L321
  988. L325
  989. ;         
  990.     bra    L363
  991. L326
  992. ;         for (i=0;
  993.     moveq    #0,d0
  994.     bra.b    L330
  995. L327
  996. ;            if (mask[i]) 
  997.     move.l    d0,d2
  998.     add.l    a1,d2
  999.     move.l    d2,a3
  1000.     tst.b    (a3)
  1001.     beq.b    L329
  1002. L328
  1003. ;               src[i] ^= dest[i];
  1004.     move.l    d0,d2
  1005.     asl.l    #2,d2
  1006.     add.l    a2,d2
  1007.     move.l    d2,a3
  1008.     move.l    (a3),d3
  1009.     move.l    d0,d2
  1010.     asl.l    #2,d2
  1011.     add.l    a0,d2
  1012.     move.l    d2,a4
  1013.     move.l    a4,a3
  1014.     move.l    (a3),d2
  1015.     eor.l    d3,d2
  1016.     move.l    a4,a3
  1017.     move.l    d2,(a3)
  1018. L329
  1019.     addq.l    #1,d0
  1020. L330
  1021.     cmp.l    d1,d0
  1022.     blo.b    L327
  1023. L331
  1024. ;         
  1025.     bra    L363
  1026. L332
  1027. ;         for (i=0;
  1028.     moveq    #0,d0
  1029.     bra.b    L336
  1030. L333
  1031. ;            if (mask[i]) 
  1032.     move.l    d0,d2
  1033.     add.l    a1,d2
  1034.     move.l    d2,a3
  1035.     tst.b    (a3)
  1036.     beq.b    L335
  1037. L334
  1038. ;               src[i] = ~(src[i] ^ dest[i]);
  1039.     move.l    d0,d2
  1040.     asl.l    #2,d2
  1041.     add.l    a0,d2
  1042.     move.l    d2,a3
  1043.     move.l    (a3),d2
  1044.     move.l    d0,d3
  1045.     asl.l    #2,d3
  1046.     add.l    a2,d3
  1047.     move.l    d3,a3
  1048.     move.l    (a3),d3
  1049.     eor.l    d3,d2
  1050.     not.l    d2
  1051.     move.l    d0,d3
  1052.     asl.l    #2,d3
  1053.     add.l    a0,d3
  1054.     move.l    d3,a3
  1055.     move.l    d2,(a3)
  1056. L335
  1057.     addq.l    #1,d0
  1058. L336
  1059.     cmp.l    d1,d0
  1060.     blo.b    L333
  1061. L337
  1062. ;         
  1063.     bra    L363
  1064. L338
  1065. ;         for (i=0;
  1066.     moveq    #0,d0
  1067.     bra.b    L342
  1068. L339
  1069. ;            if (mask[i]) 
  1070.     move.l    d0,d2
  1071.     add.l    a1,d2
  1072.     move.l    d2,a3
  1073.     tst.b    (a3)
  1074.     beq.b    L341
  1075. L340
  1076. ;               src[i] = src[i] & ~dest[i];
  1077.     move.l    d0,d2
  1078.     asl.l    #2,d2
  1079.     add.l    a0,d2
  1080.     move.l    d2,a3
  1081.     move.l    (a3),d2
  1082.     move.l    d0,d3
  1083.     asl.l    #2,d3
  1084.     add.l    a2,d3
  1085.     move.l    d3,a3
  1086.     move.l    (a3),d3
  1087.     not.l    d3
  1088.     and.l    d3,d2
  1089.     move.l    d0,d3
  1090.     asl.l    #2,d3
  1091.     add.l    a0,d3
  1092.     move.l    d3,a3
  1093.     move.l    d2,(a3)
  1094. L341
  1095.     addq.l    #1,d0
  1096. L342
  1097.     cmp.l    d1,d0
  1098.     blo.b    L339
  1099. L343
  1100. ;         
  1101.     bra    L363
  1102. L344
  1103. ;         for (i=0;
  1104.     moveq    #0,d0
  1105.     bra.b    L348
  1106. L345
  1107. ;            if (mask[i]) 
  1108.     move.l    d0,d2
  1109.     add.l    a1,d2
  1110.     move.l    d2,a3
  1111.     tst.b    (a3)
  1112.     beq.b    L347
  1113. L346
  1114. ;               src[i] = ~src[i] & dest[i];
  1115.     move.l    d0,d2
  1116.     asl.l    #2,d2
  1117.     add.l    a0,d2
  1118.     move.l    d2,a3
  1119.     move.l    (a3),d2
  1120.     not.l    d2
  1121.     move.l    d0,d3
  1122.     asl.l    #2,d3
  1123.     add.l    a2,d3
  1124.     move.l    d3,a3
  1125.     and.l    (a3),d2
  1126.     move.l    d0,d3
  1127.     asl.l    #2,d3
  1128.     add.l    a0,d3
  1129.     move.l    d3,a3
  1130.     move.l    d2,(a3)
  1131. L347
  1132.     addq.l    #1,d0
  1133. L348
  1134.     cmp.l    d1,d0
  1135.     blo.b    L345
  1136. L349
  1137. ;         
  1138.     bra    L363
  1139. L350
  1140. ;         for (i=0;
  1141.     moveq    #0,d0
  1142.     bra.b    L354
  1143. L351
  1144. ;            if (mask[i]) 
  1145.     move.l    d0,d2
  1146.     add.l    a1,d2
  1147.     move.l    d2,a3
  1148.     tst.b    (a3)
  1149.     beq.b    L353
  1150. L352
  1151. ;               src[i] = src[i] | ~dest[i];
  1152.     move.l    d0,d2
  1153.     asl.l    #2,d2
  1154.     add.l    a0,d2
  1155.     move.l    d2,a3
  1156.     move.l    (a3),d2
  1157.     move.l    d0,d3
  1158.     asl.l    #2,d3
  1159.     add.l    a2,d3
  1160.     move.l    d3,a3
  1161.     move.l    (a3),d3
  1162.     not.l    d3
  1163.     or.l    d3,d2
  1164.     move.l    d0,d3
  1165.     asl.l    #2,d3
  1166.     add.l    a0,d3
  1167.     move.l    d3,a3
  1168.     move.l    d2,(a3)
  1169. L353
  1170.     addq.l    #1,d0
  1171. L354
  1172.     cmp.l    d1,d0
  1173.     blo.b    L351
  1174. L355
  1175. ;         
  1176.     bra.b    L363
  1177. L356
  1178. ;         for (i=0;
  1179.     moveq    #0,d0
  1180.     bra.b    L360
  1181. L357
  1182. ;            if (mask[i]) 
  1183.     move.l    d0,d2
  1184.     add.l    a1,d2
  1185.     move.l    d2,a3
  1186.     tst.b    (a3)
  1187.     beq.b    L359
  1188. L358
  1189. ;               src[i] = ~src[i] | dest[i];
  1190.     move.l    d0,d2
  1191.     asl.l    #2,d2
  1192.     add.l    a0,d2
  1193.     move.l    d2,a3
  1194.     move.l    (a3),d2
  1195.     not.l    d2
  1196.     move.l    d0,d3
  1197.     asl.l    #2,d3
  1198.     add.l    a2,d3
  1199.     move.l    d3,a3
  1200.     or.l    (a3),d2
  1201.     move.l    d0,d3
  1202.     asl.l    #2,d3
  1203.     add.l    a0,d3
  1204.     move.l    d3,a3
  1205.     move.l    d2,(a3)
  1206. L359
  1207.     addq.l    #1,d0
  1208. L360
  1209.     cmp.l    d1,d0
  1210.     blo.b    L357
  1211. L361
  1212. ;         
  1213.     bra.b    L363
  1214. L362
  1215. ;         gl_problem(ctx, "Bad function in rgba_logicop");
  1216.     move.l    #L269,-(a7)
  1217.     move.l    a4,-(a7)
  1218.     jsr    _gl_problem
  1219.     addq.w    #$8,a7
  1220. L363
  1221.     movem.l    (a7)+,d2-d4/a2-a4
  1222.     rts
  1223.  
  1224. L269
  1225.     dc.b    'Bad function in rgba_logicop',0
  1226.  
  1227.     SECTION "_gl_logicop_rgba_span:0",CODE
  1228.  
  1229.  
  1230. ;void gl_logicop_rgba_span( GLcontext *ctx,
  1231.     XDEF    _gl_logicop_rgba_span
  1232. _gl_logicop_rgba_span
  1233. L366    EQU    -$1900
  1234.     link    a5,#L366
  1235.     movem.l    d2/a2-a4,-(a7)
  1236.     movem.l    $10(a5),d0/d1/a4
  1237.     move.l    $C(a5),d2
  1238.     move.l    $8(a5),a2
  1239.     move.l    $1C(a5),a3
  1240. L365
  1241. ;   gl_read_rgba_span( ctx, n, x, y, dest );
  1242.     pea    -$1900(a5)
  1243.     move.l    d1,-(a7)
  1244.     move.l    d0,-(a7)
  1245.     move.l    d2,-(a7)
  1246.     move.l    a2,-(a7)
  1247.     jsr    _gl_read_rgba_span
  1248.     add.w    #$14,a7
  1249. ;   rgba_logicop( ctx, n, mask, (GLuint *) rgba, (const GLuint *) 
  1250.     pea    -$1900(a5)
  1251.     move.l    a4,-(a7)
  1252.     move.l    a3,-(a7)
  1253.     move.l    d2,-(a7)
  1254.     move.l    a2,-(a7)
  1255.     jsr    _rgba_logicop
  1256.     add.w    #$14,a7
  1257.     movem.l    (a7)+,d2/a2-a4
  1258.     unlk    a5
  1259.     rts
  1260.  
  1261.     SECTION "_gl_logicop_rgba_pixels:0",CODE
  1262.  
  1263.  
  1264. ;void gl_logicop_rgba_pixels( GLcontext *ctx,
  1265.     XDEF    _gl_logicop_rgba_pixels
  1266. _gl_logicop_rgba_pixels
  1267. L370    EQU    -$4B00
  1268.     link    a5,#L370
  1269.     movem.l    d2/a2-a4,-(a7)
  1270.     movem.l    $C(a5),d2/a4
  1271.     move.l    $8(a5),a2
  1272.     move.l    $1C(a5),a3
  1273. L367
  1274. ;   (*ctx->Driver.ReadRGBAPixels)( ctx, n, x, y, dest, mask );
  1275.     move.l    a3,-(a7)
  1276.     pea    -$4B00(a5)
  1277.     move.l    $14(a5),-(a7)
  1278.     move.l    a4,-(a7)
  1279.     move.l    d2,-(a7)
  1280.     move.l    a2,-(a7)
  1281.     move.l    $958(a2),a0
  1282.     jsr    (a0)
  1283.     add.w    #$18,a7
  1284. ;   if (ctx->RasterMask & ALPHABUF_BIT) 
  1285.     move.l    a2,a0
  1286.     add.l    #$E974,a0
  1287.     move.l    (a0),d0
  1288.     and.l    #$100,d0
  1289.     beq.b    L369
  1290. L368
  1291. ;      gl_read_alpha_pixels( ctx, n, x, y, dest, mask );
  1292.     move.l    a3,-(a7)
  1293.     pea    -$4B00(a5)
  1294.     move.l    $14(a5),-(a7)
  1295.     move.l    a4,-(a7)
  1296.     move.l    d2,-(a7)
  1297.     move.l    a2,-(a7)
  1298.     jsr    _gl_read_alpha_pixels
  1299.     add.w    #$18,a7
  1300. L369
  1301. ;   rgba_logicop( ctx, n, mask, (GLuint *) rgba, (const GLuint *) 
  1302.     pea    -$4B00(a5)
  1303.     move.l    $18(a5),-(a7)
  1304.     move.l    a3,-(a7)
  1305.     move.l    d2,-(a7)
  1306.     move.l    a2,-(a7)
  1307.     jsr    _rgba_logicop
  1308.     add.w    #$14,a7
  1309.     movem.l    (a7)+,d2/a2-a4
  1310.     unlk    a5
  1311.     rts
  1312.  
  1313.     END
  1314.